// WeakSet 的成员只能是对象，而不能是其他类型的值，我们用代码演示一下
// var mapList = new WeakMap()
var mapList = {
  2: "abc",
  3: "def",
  4: "ghi",
  5: "jkl",
  6: "mno",
  7: "pqrs",
  8: "tuv",
  9: "wxyz",
};

var letterCombinations = function (digits) {
  // 如果输入的不是 2-9之间的数字 直接返回空数组
  var isExps = /^[2-9]{1,4}$/;
  // 验证 如果是错误的
  if (!isExps.test(digits)) {
    console.log("数据异常");
    return [];
  }
  // 如果长度为一
  if (digits.length === 1) {
    console.log("digits ==> ", digits);
    return mapList[digits].split("");
  }

  // 如果正则匹配合法
  let result = [];
  // console.log('digits ==> ', digits)
  //
  new Array().forEach.call(digits, (v, i) => {
    //   console.log('v ===> ', v)
    result.push(mapList[v].split(""));
  });

  // console.log('result ===> ', result)
  let results = [];
  //
  let i = 1; // 递次节点
  let j = 0; // 开始节点
  //  abc def ghi
  console.log("result ===> ", result);
  while (result[j]) {
    //   debugger
    result[j].forEach((v) => {
      console.log("result[i] ==f> ", i, result[i]);
      if (result[i]) {
        result[i].forEach((vi) => {
          results.push(v + "" + vi);
        });
      } else {
        // 没有下一个了
        //   j++
        //   i++
      }
      // i++
    });
    // 外层循环完毕 也就是说 第一层循环结束
    j++;
    i = j + 1;
  }

  console.log("results ==> ", results);
  return results;
};

//   letterCombinations('234')
letterCombinations("2");
